{
 "cells": [
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "# 利用回归问题进行超参数搜索"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 1,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "2.0.0\n",
      "sys.version_info(major=3, minor=6, micro=10, releaselevel='final', serial=0)\n",
      "matplotlib 3.1.2\n",
      "numpy 1.18.1\n",
      "pandas 0.25.3\n",
      "sklearn 0.22.1\n",
      "tensorflow 2.0.0\n",
      "tensorflow_core.keras 2.2.4-tf\n"
     ]
    }
   ],
   "source": [
    "# 导入\n",
    "import matplotlib as mpl\n",
    "import matplotlib.pyplot as plt\n",
    "%matplotlib inline\n",
    "import numpy as np\n",
    "import sklearn\n",
    "import pandas as pd\n",
    "import os\n",
    "import sys\n",
    "import time\n",
    "import tensorflow as tf\n",
    "from tensorflow import keras\n",
    "\n",
    "print(tf.__version__)\n",
    "print(sys.version_info)\n",
    "for module in mpl,np,pd,sklearn,tf,keras:\n",
    "    print(module.__name__,module.__version__)"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "### 数据读取"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 2,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      ".. _california_housing_dataset:\n",
      "\n",
      "California Housing dataset\n",
      "--------------------------\n",
      "\n",
      "**Data Set Characteristics:**\n",
      "\n",
      "    :Number of Instances: 20640\n",
      "\n",
      "    :Number of Attributes: 8 numeric, predictive attributes and the target\n",
      "\n",
      "    :Attribute Information:\n",
      "        - MedInc        median income in block\n",
      "        - HouseAge      median house age in block\n",
      "        - AveRooms      average number of rooms\n",
      "        - AveBedrms     average number of bedrooms\n",
      "        - Population    block population\n",
      "        - AveOccup      average house occupancy\n",
      "        - Latitude      house block latitude\n",
      "        - Longitude     house block longitude\n",
      "\n",
      "    :Missing Attribute Values: None\n",
      "\n",
      "This dataset was obtained from the StatLib repository.\n",
      "http://lib.stat.cmu.edu/datasets/\n",
      "\n",
      "The target variable is the median house value for California districts.\n",
      "\n",
      "This dataset was derived from the 1990 U.S. census, using one row per census\n",
      "block group. A block group is the smallest geographical unit for which the U.S.\n",
      "Census Bureau publishes sample data (a block group typically has a population\n",
      "of 600 to 3,000 people).\n",
      "\n",
      "It can be downloaded/loaded using the\n",
      ":func:`sklearn.datasets.fetch_california_housing` function.\n",
      "\n",
      ".. topic:: References\n",
      "\n",
      "    - Pace, R. Kelley and Ronald Barry, Sparse Spatial Autoregressions,\n",
      "      Statistics and Probability Letters, 33 (1997) 291-297\n",
      "\n",
      "(20640, 8)\n",
      "(20640,)\n"
     ]
    }
   ],
   "source": [
    "# 导入数据集 房价预测\n",
    "from sklearn.datasets import fetch_california_housing\n",
    "\n",
    "housing = fetch_california_housing()\n",
    "print(housing.DESCR)\n",
    "print(housing.data.shape)\n",
    "print(housing.target.shape)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 3,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "(11610, 8) (11610,)\n",
      "(3870, 8) (3870,)\n",
      "(5160, 8) (5160,)\n"
     ]
    }
   ],
   "source": [
    "# 切分数据集\n",
    "from sklearn.model_selection import train_test_split\n",
    "\n",
    "x_train_all,x_test,y_train_all,y_test = train_test_split(\n",
    "    housing.data,housing.target,random_state=7)\n",
    "x_train,x_valid,y_train,y_valid = train_test_split(\n",
    "    x_train_all,y_train_all,random_state=11)\n",
    "\n",
    "print(x_train.shape,y_train.shape)\n",
    "print(x_valid.shape,y_valid.shape)\n",
    "print(x_test.shape,y_test.shape)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 4,
   "metadata": {},
   "outputs": [],
   "source": [
    "# 对数据进行归一化\n",
    "from sklearn.preprocessing import StandardScaler\n",
    "\n",
    "scaler = StandardScaler()\n",
    "x_train_scaled = scaler.fit_transform(x_train)\n",
    "x_valid_scaled = scaler.transform(x_valid)\n",
    "x_test_scaled = scaler.transform(x_test)"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "### 模型构建\n",
    "#### 手动实现超参数搜索\n",
    "\n",
    "简化问题：只针对learning_rate进行超参数搜索\n",
    "\n",
    "learning_rate：[1e-4, 3e-4, 1e-3, 3e-3, 1e-2, 3e-2]\n",
    "\n",
    "学习率用于参数更新上：W = W + grad * learning_rate"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 5,
   "metadata": {
    "scrolled": true
   },
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "Train on 11610 samples, validate on 3870 samples\n",
      "Epoch 1/100\n",
      "11610/11610 [==============================] - 2s 189us/sample - loss: 2.9827 - val_loss: 2.5992\n",
      "Epoch 2/100\n",
      "11610/11610 [==============================] - 1s 112us/sample - loss: 2.0778 - val_loss: 1.8459\n",
      "Epoch 3/100\n",
      "11610/11610 [==============================] - 1s 112us/sample - loss: 1.5144 - val_loss: 1.4004\n",
      "Epoch 4/100\n",
      "11610/11610 [==============================] - 2s 131us/sample - loss: 1.1975 - val_loss: 1.1572\n",
      "Epoch 5/100\n",
      "11610/11610 [==============================] - 1s 121us/sample - loss: 1.0241 - val_loss: 1.0187\n",
      "Epoch 6/100\n",
      "11610/11610 [==============================] - 1s 117us/sample - loss: 0.9178 - val_loss: 0.9268\n",
      "Epoch 7/100\n",
      "11610/11610 [==============================] - 1s 116us/sample - loss: 0.8437 - val_loss: 0.8582\n",
      "Epoch 8/100\n",
      "11610/11610 [==============================] - 1s 113us/sample - loss: 0.7816 - val_loss: 0.7995\n",
      "Epoch 9/100\n",
      "11610/11610 [==============================] - 1s 125us/sample - loss: 0.7299 - val_loss: 0.7495\n",
      "Epoch 10/100\n",
      "11610/11610 [==============================] - 1s 116us/sample - loss: 0.6859 - val_loss: 0.7082\n",
      "Epoch 11/100\n",
      "11610/11610 [==============================] - 1s 112us/sample - loss: 0.6487 - val_loss: 0.6729\n",
      "Epoch 12/100\n",
      "11610/11610 [==============================] - 1s 111us/sample - loss: 0.6154 - val_loss: 0.6398\n",
      "Epoch 13/100\n",
      "11610/11610 [==============================] - 1s 113us/sample - loss: 0.5862 - val_loss: 0.6130\n",
      "Epoch 14/100\n",
      "11610/11610 [==============================] - 1s 112us/sample - loss: 0.5612 - val_loss: 0.5887\n",
      "Epoch 15/100\n",
      "11610/11610 [==============================] - 1s 115us/sample - loss: 0.5395 - val_loss: 0.5678\n",
      "Epoch 16/100\n",
      "11610/11610 [==============================] - 1s 117us/sample - loss: 0.5207 - val_loss: 0.5498\n",
      "Epoch 17/100\n",
      "11610/11610 [==============================] - 1s 114us/sample - loss: 0.5045 - val_loss: 0.5350\n",
      "Epoch 18/100\n",
      "11610/11610 [==============================] - 1s 116us/sample - loss: 0.4904 - val_loss: 0.5211\n",
      "Epoch 19/100\n",
      "11610/11610 [==============================] - 1s 116us/sample - loss: 0.4783 - val_loss: 0.5092\n",
      "Epoch 20/100\n",
      "11610/11610 [==============================] - 1s 114us/sample - loss: 0.4674 - val_loss: 0.4982\n",
      "Epoch 21/100\n",
      "11610/11610 [==============================] - 1s 111us/sample - loss: 0.4582 - val_loss: 0.4878\n",
      "Epoch 22/100\n",
      "11610/11610 [==============================] - 1s 110us/sample - loss: 0.4502 - val_loss: 0.4794\n",
      "Epoch 23/100\n",
      "11610/11610 [==============================] - 1s 110us/sample - loss: 0.4432 - val_loss: 0.4718\n",
      "Epoch 24/100\n",
      "11610/11610 [==============================] - 1s 109us/sample - loss: 0.4371 - val_loss: 0.4645\n",
      "Epoch 25/100\n",
      "11610/11610 [==============================] - 1s 110us/sample - loss: 0.4319 - val_loss: 0.4586\n",
      "Epoch 26/100\n",
      "11610/11610 [==============================] - 1s 110us/sample - loss: 0.4270 - val_loss: 0.4531\n",
      "Epoch 27/100\n",
      "11610/11610 [==============================] - 1s 109us/sample - loss: 0.4228 - val_loss: 0.4485\n",
      "Epoch 28/100\n",
      "11610/11610 [==============================] - 1s 110us/sample - loss: 0.4192 - val_loss: 0.4439\n",
      "Epoch 29/100\n",
      "11610/11610 [==============================] - 1s 111us/sample - loss: 0.4158 - val_loss: 0.4399\n",
      "Epoch 30/100\n",
      "11610/11610 [==============================] - 1s 113us/sample - loss: 0.4129 - val_loss: 0.4365\n",
      "Epoch 31/100\n",
      "11610/11610 [==============================] - 1s 109us/sample - loss: 0.4104 - val_loss: 0.4335\n",
      "Epoch 32/100\n",
      "11610/11610 [==============================] - 1s 109us/sample - loss: 0.4080 - val_loss: 0.4307\n",
      "Epoch 33/100\n",
      "11610/11610 [==============================] - 1s 111us/sample - loss: 0.4059 - val_loss: 0.4283\n",
      "Epoch 34/100\n",
      "11610/11610 [==============================] - 1s 111us/sample - loss: 0.4038 - val_loss: 0.4252\n",
      "Epoch 35/100\n",
      "11610/11610 [==============================] - 1s 109us/sample - loss: 0.4021 - val_loss: 0.4231\n",
      "Epoch 36/100\n",
      "11610/11610 [==============================] - 1s 111us/sample - loss: 0.4005 - val_loss: 0.4211\n",
      "Epoch 37/100\n",
      "11610/11610 [==============================] - 1s 109us/sample - loss: 0.3991 - val_loss: 0.4193\n",
      "Epoch 38/100\n",
      "11610/11610 [==============================] - 1s 109us/sample - loss: 0.3978 - val_loss: 0.4173\n",
      "Epoch 39/100\n",
      "11610/11610 [==============================] - 1s 112us/sample - loss: 0.3964 - val_loss: 0.4156\n",
      "Train on 11610 samples, validate on 3870 samples\n",
      "Epoch 1/100\n",
      "11610/11610 [==============================] - 2s 145us/sample - loss: 4.7249 - val_loss: 2.7832\n",
      "Epoch 2/100\n",
      "11610/11610 [==============================] - 1s 114us/sample - loss: 1.6932 - val_loss: 1.0824\n",
      "Epoch 3/100\n",
      "11610/11610 [==============================] - 1s 114us/sample - loss: 0.8409 - val_loss: 0.7637\n",
      "Epoch 4/100\n",
      "11610/11610 [==============================] - 1s 115us/sample - loss: 0.6699 - val_loss: 0.6851\n",
      "Epoch 5/100\n",
      "11610/11610 [==============================] - 1s 115us/sample - loss: 0.6051 - val_loss: 0.6308\n",
      "Epoch 6/100\n",
      "11610/11610 [==============================] - 1s 112us/sample - loss: 0.5594 - val_loss: 0.5864\n",
      "Epoch 7/100\n",
      "11610/11610 [==============================] - 1s 111us/sample - loss: 0.5220 - val_loss: 0.5485\n",
      "Epoch 8/100\n",
      "11610/11610 [==============================] - 1s 114us/sample - loss: 0.4909 - val_loss: 0.5148\n",
      "Epoch 9/100\n",
      "11610/11610 [==============================] - 1s 114us/sample - loss: 0.4663 - val_loss: 0.4886\n",
      "Epoch 10/100\n",
      "11610/11610 [==============================] - 1s 112us/sample - loss: 0.4469 - val_loss: 0.4716\n",
      "Epoch 11/100\n",
      "11610/11610 [==============================] - 1s 111us/sample - loss: 0.4311 - val_loss: 0.4543\n",
      "Epoch 12/100\n",
      "11610/11610 [==============================] - 1s 114us/sample - loss: 0.4199 - val_loss: 0.4438\n",
      "Epoch 13/100\n",
      "11610/11610 [==============================] - 1s 117us/sample - loss: 0.4113 - val_loss: 0.4341\n",
      "Epoch 14/100\n",
      "11610/11610 [==============================] - 1s 107us/sample - loss: 0.4041 - val_loss: 0.4265\n",
      "Epoch 15/100\n",
      "11610/11610 [==============================] - 1s 111us/sample - loss: 0.3988 - val_loss: 0.4194\n",
      "Epoch 16/100\n",
      "11610/11610 [==============================] - 1s 109us/sample - loss: 0.3940 - val_loss: 0.4159\n",
      "Epoch 17/100\n",
      "11610/11610 [==============================] - 1s 110us/sample - loss: 0.3909 - val_loss: 0.4108\n",
      "Epoch 18/100\n",
      "11610/11610 [==============================] - 1s 109us/sample - loss: 0.3875 - val_loss: 0.4073\n",
      "Epoch 19/100\n",
      "11610/11610 [==============================] - 1s 113us/sample - loss: 0.3848 - val_loss: 0.4118\n",
      "Epoch 20/100\n",
      "11610/11610 [==============================] - 1s 111us/sample - loss: 0.3819 - val_loss: 0.4014\n",
      "Epoch 21/100\n",
      "11610/11610 [==============================] - 1s 109us/sample - loss: 0.3794 - val_loss: 0.3996\n",
      "Epoch 22/100\n",
      "11610/11610 [==============================] - 1s 112us/sample - loss: 0.3770 - val_loss: 0.3965\n",
      "Epoch 23/100\n",
      "11610/11610 [==============================] - 1s 111us/sample - loss: 0.3744 - val_loss: 0.3936\n",
      "Epoch 24/100\n",
      "11610/11610 [==============================] - 1s 109us/sample - loss: 0.3730 - val_loss: 0.3936\n",
      "Epoch 25/100\n",
      "11610/11610 [==============================] - 1s 111us/sample - loss: 0.3707 - val_loss: 0.3908\n",
      "Epoch 26/100\n",
      "11610/11610 [==============================] - 1s 112us/sample - loss: 0.3689 - val_loss: 0.3890\n",
      "Epoch 27/100\n",
      "11610/11610 [==============================] - 1s 111us/sample - loss: 0.3670 - val_loss: 0.3849\n",
      "Epoch 28/100\n",
      "11610/11610 [==============================] - 1s 109us/sample - loss: 0.3650 - val_loss: 0.3850\n",
      "Epoch 29/100\n",
      "11610/11610 [==============================] - 1s 110us/sample - loss: 0.3646 - val_loss: 0.3839\n",
      "Epoch 30/100\n",
      "11610/11610 [==============================] - 1s 110us/sample - loss: 0.3619 - val_loss: 0.3809\n",
      "Train on 11610 samples, validate on 3870 samples\n",
      "Epoch 1/100\n",
      "11610/11610 [==============================] - 2s 135us/sample - loss: 1.4411 - val_loss: 0.7024\n",
      "Epoch 2/100\n",
      "11610/11610 [==============================] - 1s 111us/sample - loss: 0.5595 - val_loss: 0.5352\n",
      "Epoch 3/100\n",
      "11610/11610 [==============================] - 1s 110us/sample - loss: 0.4603 - val_loss: 0.4602\n",
      "Epoch 4/100\n",
      "11610/11610 [==============================] - 1s 109us/sample - loss: 0.4219 - val_loss: 0.4301\n",
      "Epoch 5/100\n",
      "11610/11610 [==============================] - 1s 110us/sample - loss: 0.4061 - val_loss: 0.4143\n",
      "Epoch 6/100\n",
      "11610/11610 [==============================] - 1s 111us/sample - loss: 0.3928 - val_loss: 0.4017\n",
      "Epoch 7/100\n",
      "11610/11610 [==============================] - 1s 110us/sample - loss: 0.3876 - val_loss: 0.3954\n",
      "Epoch 8/100\n",
      "11610/11610 [==============================] - 1s 109us/sample - loss: 0.3791 - val_loss: 0.3913\n",
      "Epoch 9/100\n",
      "11610/11610 [==============================] - 1s 109us/sample - loss: 0.3744 - val_loss: 0.3850\n",
      "Epoch 10/100\n",
      "11610/11610 [==============================] - 1s 111us/sample - loss: 0.3719 - val_loss: 0.3791\n",
      "Epoch 11/100\n",
      "11610/11610 [==============================] - 1s 109us/sample - loss: 0.3674 - val_loss: 0.3771\n",
      "Epoch 12/100\n",
      "11610/11610 [==============================] - 1s 112us/sample - loss: 0.3660 - val_loss: 0.3727\n",
      "Epoch 13/100\n",
      "11610/11610 [==============================] - 1s 109us/sample - loss: 0.3584 - val_loss: 0.3751\n",
      "Epoch 14/100\n",
      "11610/11610 [==============================] - 1s 109us/sample - loss: 0.3558 - val_loss: 0.3682\n",
      "Epoch 15/100\n",
      "11610/11610 [==============================] - 1s 110us/sample - loss: 0.3540 - val_loss: 0.3616\n",
      "Epoch 16/100\n",
      "11610/11610 [==============================] - 1s 110us/sample - loss: 0.3503 - val_loss: 0.3571\n",
      "Epoch 17/100\n",
      "11610/11610 [==============================] - 1s 111us/sample - loss: 0.3558 - val_loss: 0.3540\n",
      "Epoch 18/100\n",
      "11610/11610 [==============================] - 1s 109us/sample - loss: 0.3489 - val_loss: 0.3487\n",
      "Epoch 19/100\n",
      "11610/11610 [==============================] - 1s 111us/sample - loss: 0.3407 - val_loss: 0.3495\n",
      "Epoch 20/100\n",
      "11610/11610 [==============================] - 2s 129us/sample - loss: 0.3380 - val_loss: 0.3435\n",
      "Epoch 21/100\n",
      "11610/11610 [==============================] - 1s 127us/sample - loss: 0.3372 - val_loss: 0.3605\n",
      "Epoch 22/100\n",
      "11610/11610 [==============================] - 1s 125us/sample - loss: 0.3385 - val_loss: 0.3401\n",
      "Epoch 23/100\n",
      "11610/11610 [==============================] - 1s 111us/sample - loss: 0.3341 - val_loss: 0.3391\n",
      "Epoch 24/100\n",
      "11610/11610 [==============================] - 1s 116us/sample - loss: 0.3309 - val_loss: 0.3353\n",
      "Epoch 25/100\n",
      "11610/11610 [==============================] - 1s 106us/sample - loss: 0.3286 - val_loss: 0.3294\n",
      "Epoch 26/100\n",
      "11610/11610 [==============================] - 1s 109us/sample - loss: 0.3304 - val_loss: 0.3331\n",
      "Epoch 27/100\n",
      "11610/11610 [==============================] - 1s 110us/sample - loss: 0.3301 - val_loss: 0.3320\n",
      "Epoch 28/100\n",
      "11610/11610 [==============================] - 1s 109us/sample - loss: 0.3296 - val_loss: 0.3266\n",
      "Epoch 29/100\n",
      "11610/11610 [==============================] - 1s 110us/sample - loss: 0.3201 - val_loss: 0.3261\n",
      "Epoch 30/100\n",
      "11610/11610 [==============================] - 1s 113us/sample - loss: 0.3216 - val_loss: 0.3250\n",
      "Train on 11610 samples, validate on 3870 samples\n",
      "Epoch 1/100\n",
      "11610/11610 [==============================] - 2s 144us/sample - loss: 0.7819 - val_loss: 0.4592\n",
      "Epoch 2/100\n",
      "11610/11610 [==============================] - 1s 115us/sample - loss: 0.4414 - val_loss: 0.4147\n",
      "Epoch 3/100\n",
      "11610/11610 [==============================] - 1s 112us/sample - loss: 0.3978 - val_loss: 0.3827\n",
      "Epoch 4/100\n",
      "11610/11610 [==============================] - 1s 110us/sample - loss: 0.3818 - val_loss: 0.3808\n",
      "Epoch 5/100\n",
      "11610/11610 [==============================] - 1s 112us/sample - loss: 0.3723 - val_loss: 0.3708\n",
      "Epoch 6/100\n",
      "11610/11610 [==============================] - 1s 115us/sample - loss: 0.3705 - val_loss: 0.3782\n",
      "Epoch 7/100\n",
      "11610/11610 [==============================] - 1s 112us/sample - loss: 0.3737 - val_loss: 0.3478\n",
      "Epoch 8/100\n",
      "11610/11610 [==============================] - 1s 113us/sample - loss: 0.3435 - val_loss: 0.3526\n",
      "Epoch 9/100\n",
      "11610/11610 [==============================] - 1s 115us/sample - loss: 0.3461 - val_loss: 0.3436\n",
      "Epoch 10/100\n",
      "11610/11610 [==============================] - 1s 113us/sample - loss: 0.3327 - val_loss: 0.3415\n",
      "Epoch 11/100\n",
      "11610/11610 [==============================] - 1s 112us/sample - loss: 0.3461 - val_loss: 0.3491\n",
      "Epoch 12/100\n",
      "11610/11610 [==============================] - 1s 116us/sample - loss: 0.3496 - val_loss: 0.3444\n",
      "Train on 11610 samples, validate on 3870 samples\n",
      "Epoch 1/100\n",
      "11610/11610 [==============================] - 2s 136us/sample - loss: 0.6722 - val_loss: 0.4257\n",
      "Epoch 2/100\n",
      "11610/11610 [==============================] - 1s 113us/sample - loss: 0.4982 - val_loss: 0.4352\n",
      "Epoch 3/100\n",
      "11610/11610 [==============================] - 1s 109us/sample - loss: 0.4016 - val_loss: 0.3690\n",
      "Epoch 4/100\n",
      "11610/11610 [==============================] - 1s 110us/sample - loss: 0.3687 - val_loss: 0.3918\n",
      "Epoch 5/100\n",
      "11610/11610 [==============================] - 1s 108us/sample - loss: 0.3578 - val_loss: 0.3870\n",
      "Epoch 6/100\n",
      "11610/11610 [==============================] - 1s 111us/sample - loss: 0.3616 - val_loss: 0.3513\n",
      "Epoch 7/100\n",
      "11610/11610 [==============================] - 1s 113us/sample - loss: 0.3861 - val_loss: 0.4145\n",
      "Epoch 8/100\n",
      "11610/11610 [==============================] - 1s 115us/sample - loss: 0.3481 - val_loss: 0.3791\n",
      "Epoch 9/100\n",
      "11610/11610 [==============================] - 1s 116us/sample - loss: 0.3584 - val_loss: 0.3495\n",
      "Epoch 10/100\n",
      "11610/11610 [==============================] - 1s 111us/sample - loss: 0.3426 - val_loss: 0.3284\n",
      "Epoch 11/100\n",
      "11610/11610 [==============================] - 1s 111us/sample - loss: 0.3409 - val_loss: 0.3471\n",
      "Epoch 12/100\n",
      "11610/11610 [==============================] - 1s 110us/sample - loss: 0.3351 - val_loss: 0.3338\n",
      "Epoch 13/100\n",
      "11610/11610 [==============================] - 1s 109us/sample - loss: 0.3277 - val_loss: 0.3221\n",
      "Epoch 14/100\n",
      "11610/11610 [==============================] - 1s 112us/sample - loss: 0.3248 - val_loss: 0.3681\n",
      "Epoch 15/100\n",
      "11610/11610 [==============================] - 1s 112us/sample - loss: 0.3435 - val_loss: 0.3359\n",
      "Train on 11610 samples, validate on 3870 samples\n",
      "Epoch 1/100\n",
      "11610/11610 [==============================] - 2s 136us/sample - loss: 1.0920 - val_loss: 0.4912\n",
      "Epoch 2/100\n",
      "11610/11610 [==============================] - 1s 112us/sample - loss: 0.9374 - val_loss: 0.4457\n",
      "Epoch 3/100\n",
      "11610/11610 [==============================] - 1s 111us/sample - loss: 1.5386 - val_loss: 0.4973\n",
      "Epoch 4/100\n",
      "11610/11610 [==============================] - 1s 113us/sample - loss: 0.6324 - val_loss: 0.3817\n",
      "Epoch 5/100\n",
      "11610/11610 [==============================] - 1s 109us/sample - loss: 0.3938 - val_loss: 0.3620\n",
      "Epoch 6/100\n",
      "11610/11610 [==============================] - 2s 134us/sample - loss: 0.3971 - val_loss: 0.3879\n",
      "Epoch 7/100\n",
      "11610/11610 [==============================] - 1s 115us/sample - loss: 0.3696 - val_loss: 0.4006\n",
      "Epoch 8/100\n",
      "11610/11610 [==============================] - 1s 115us/sample - loss: 0.3992 - val_loss: 0.3882\n",
      "Epoch 9/100\n",
      "11610/11610 [==============================] - 1s 113us/sample - loss: 0.3673 - val_loss: 0.3760\n",
      "Epoch 10/100\n",
      "11610/11610 [==============================] - 1s 112us/sample - loss: 0.3661 - val_loss: 0.3821\n"
     ]
    }
   ],
   "source": [
    "# 手动实现学习率搜索\n",
    "learning_rates = [1e-4, 3e-4, 1e-3, 3e-3, 1e-2, 3e-2]\n",
    "histories = []\n",
    "for lr in learning_rates:\n",
    "    model = keras.models.Sequential([\n",
    "        keras.layers.Dense(30, activation='relu',input_shape=x_train.shape[1:]),\n",
    "        keras.layers.Dense(1)\n",
    "    ])\n",
    "\n",
    "    optimizer = keras.optimizers.Adam(learning_rate=lr)\n",
    "    model.compile(loss='mean_squared_error',optimizer=optimizer)\n",
    "\n",
    "    callbacks = [keras.callbacks.EarlyStopping(patience=5,min_delta=1e-2)]\n",
    "    history = model.fit(x_train_scaled,y_train,epochs=100,\n",
    "                        validation_data=(x_valid_scaled,y_valid),\n",
    "                        callbacks=callbacks)\n",
    "    histories.append(history)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 6,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "Learning Rate: 0.0001\n"
     ]
    },
    {
     "data": {
      "image/png": "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Ig3Oww8/zHPPPXfs9eOPP85vfvMbhg8fTu/evenevTvvvPPOaX9uQUEBEyZMoHv37vTq1Ys5c+YAsGrVKvr370/Pnj0566yz2LBhA/n5+VxyySX06NGDbt26HXuW8pnQcJh1JCLUyyMXd+a+1wtY3fkmun73Mpw1Btqc53ZpIiKn778/h90ravYzm3WHUX84aZMxY8bwwAMPcPfddwMwY8YMPvzwQx588EFiY2PZt28fAwcO5PLLL8cYU+2vfvZZ526XFStWsHbtWkaMGMH69et5/vnn+fGPf8zYsWMpKirC7/cze/ZsmjdvzgcffADAwYMHf2CHy2jPuA5delYq/dskMnHLcErjWsH7D0BxgdtliYg0GL169SIrK4udO3eybNkyEhISSE1N5dFHH+Wss87iggsuYMeOHezZc3rDEM+fP59x48YB0KlTJ1q1asX69esZNGgQv/vd73jyySfZunUrERERdO/enU8//ZSHH36YL774gri4uDPul/aM65Axhscv68ql//iCqe0eYNzGB2H+X2DYo26XJiJyek6xB1ubRo8ezcyZM9m9ezdjxoxh6tSp7N27l8WLF+Pz+WjdujUFBae3o1PV85FvvPFGBgwYwAcffMDIkSN56aWXOP/881m8eDGzZ8/mkUceYcSIEfz6178+oz5pz7iOdWkeyw39W/L46mYc6nAVfPEXyFrrdlkiIg3GmDFjmD59OjNnzmT06NEcPHiQlJQUfD4fc+bMYevWraf9mYMHD2bq1KkArF+/nm3btpGRkcGmTZto27Yt999/P5dffjnLly9n586dREZG8qMf/YiHHnqoRp4IpTB2wU9HZBAdFsLDeWOwYdHO4erAczZFROTkunbtSm5uLi1atCA1NZWxY8eyaNEi+vbty9SpU+nUqdNpf+bdd9+N3++ne/fuXH/99UyZMoWwsDDeeOMNunXrRs+ePVm7di033XQTK1asOHZR129/+1t++ctfnnGfdJjaBYlRofzkwo489u4qVp7zEN0X/wK+exX63Ox2aSIiDcKKFWUXjzVp0oQFCxZU2m7Xrl1Vfkbr1q1ZuXIlAOHh4UyZMuWENo888giPPPLIcetGjhzJyJEjf0DVVdOesUvGDmhJRtMY7lrVGX+rc+HjX0OunnssItIYKYxdEuL18NhlXcg8UMC0Jg9AyRFnMBAREalRK1asoGfP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\n",
      "text/plain": [
       "<Figure size 576x360 with 1 Axes>"
      ]
     },
     "metadata": {
      "needs_background": "light"
     },
     "output_type": "display_data"
    },
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "Learning Rate: 0.0003\n"
     ]
    },
    {
     "data": {
      "image/png": "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xJoOs0b0tJj9xtXuztQzjUVEWsebd8DWpYf99pRQELwNIqhXAUy+75Dvu+SSS/jRj37EjTfeCMCLL77IW2+9xa233kqXLl3YuXMnJ510Eueffz7GmLjrM2PGDACWLl3KF198wcSJEykuLuaRRx7hhz/8IZdffjlVVVWEQiFmz55N7969eeONNwDYt29fC37z2BKzZdy1PwQyYo6oVstYRKTjGj16NNu3b2fz5s0sWbKEbt26kZuby1133cWIESM4++yz2bRpE9u2bWvR537wwQdceeWVAAwdOpRjjjmG4uJiTj75ZP7nf/6HX//616xfv56UlBQKCgp49913uf3223n//ffJzMw84t8rMVvGxjiDuBrMUa0wFhFpJc20YJtTfgSPULz44ot56aWX2Lp1K5dccgnPPvssO3bsYOHChfj9fgYMGEBFRUWLPrOp5yNfdtllnHjiibzxxhtMmjSJxx57jDPPPJOFCxcye/Zs7rzzTiZOnMjdd999WL9LjcRsGUPdHNVRJ1hhLCLS8V1yySU8//zzvPTSS1x88cXs27eP7Oxs/H4/c+bMYf369S3+zAkTJvDss88CUFxczIYNG8jLy2PNmjUMGjSIH/zgB5x//vl8/vnnbN68mdTUVK644gp+8pOftMoToRKzZQzOdeOFT8D+zZDZB3DCuLw6RFUwTMCXuN9DREQS2fDhwzlw4AB9+vQhNzeXyy+/nPPOO48xY8YwatQohg4d2uLPvPHGG5k+fToFBQX4fD5mzZpFUlISL7zwAs888wx+v59evXpx9913s2DBAm677TY8Hg9+v5+HH374iH+nxA5jcK4b14Rxat2UmFkZSW7VTEREjtDSpXWDx3r27Mm8efNilqt5/nEsAwYMYNkyZ06K5ORkZs2a1ajMnXfeyZ133llv36RJk5g0adJh1Lppids8zB7mrKPmqNb81CIi0h4lbss4pSt06VtvRHUXhbGISKezdOnS2pHSNZKSkpg/f75LNWosccMYnK7qqDmqa1rGutdYRKTzKCgoYPHixW5X45ASt5sanNubdq6CYBWgbmoRkSPV1C1AUl9Lz1OCh3E+hIOw60tAYSwiciSSk5PZtWuXArkZ1lp27dpFcnJy3O9J7G7qmkFc25ZDznCFsYjIEejbty8lJSXs2LHjiD+roqKiRWHV0SQnJ9O3b9+4yyd2GPc8Djz+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TeCSgHeoi4iIdCwKYxEREZcpjEVERFymMBYREXGZwlhERMRlCmMRERGXKYxFRERcpjAWERFxmcJYRETEZQpjERERlymMRUREXKYwFhERcZnCWERExGUKYxEREZcpjEVERFymMBYREXGZwlhERMRlCmMRERGXKYxFRERcpjAWERFxmcJYRETEZQpjERERlymMRUREXKYwFhERcZnCWERExGUKYxEREZcpjEVERFymMBYREXGZwlhERMRlCmMRERGXKYxFRERcpjAWERFxmcJYRETEZQpjERERlymMRUREXKYwFhERcZnCWERExGUKYxEREZfFFcbGmHONMauMMauNMXfEOH65MebzyPKRMWZk61dVREQkMTUbxsYYLzADmAwMAy41xgxrUGwtcLq1dgTwC2Bma1dUREQkUcXTMh4HrLbWrrHWVgHPAxdEF7DWfmSt3RN5+THQt3WrKSIikrh8cZTpA2yMel0CnHiI8t8D3ox1wBhzPXA9QFZWFkVFRfHVUgAoLS3VOWshnbOW0zlrOZ2zltM5qy+eMDYx9tmYBY05AyeMT4113Fo7k0gXdl5eni0sLIyvlgJAUVEROmcto3PWcjpnLadz1nI6Z/XFE8YlQL+o132BzQ0LGWNGAI8Bk621u1qneiIiIokvnmvGC4DjjDEDjTEB4BLgtegCxpj+wCvAldba4tavpoiISOJqtmVsrQ0aY24G3ga8wOPW2uXGmOmR448AdwM9gIeMMQBBa+2Yo1dtERGRxBFPNzXW2tnA7Ab7Honavha4tnWrJiIi0jloBi4RERGXKYxFRERcpjAWERFxmcJYRETEZQpjERERlymMRUREXKYwFhERcZnCWERExGUKYxEREZcpjEVERFymMBYREXGZwlhERMRlCmMRERGXKYxFRERcpjAWERFxmcJYRETEZQpjERERlymMRUREXKYwFhERcZnCWERExGUKYxEREZcpjEVERFymMBYREXGZwlhERMRlCmMRERGXKYxFRERcpjAWERFxmcJYRETEZQpjERERlymMRUREXKYwFhERcZnCWERExGUKYxEREZcpjEVERFymMBYREXGZwlhERMRlCmMRERGXKYxFRERcpjAWERFxmcJYRETEZQpjERERlymMRUREXKYwFhERcZnCWERExGUKYxEREZfFFcbGmHONMauMMauNMXfEOG6MMb+PHP/cGHNC61dVREQkMTUbxsYYLzADmAwMAy41xgxrUGwycFxkuR54uJXrKSIikrDiaRmPA1Zba9dYa6uA54ELGpS5AHjKOj4Guhpjclu5riIiIgkpnjDuA2yMel0S2dfSMiIiIhKDL44yJsY+exhlMMZcj9ONDVBpjFkWx8+XOj2BnW5XooPROWs5nbOW0zlruc56zo6JtTOeMC4B+kW97gtsPowyWGtnAjMBjDGfWmvHxPHzJULnrOV0zlpO56zldM5aTuesvni6qRcAxxljBhpjAsAlwGsNyrwGXBUZVX0SsM9au6WV6yoiIpKQmm0ZW2uDxpibgbcBL/C4tXa5MWZ65PgjwGxgCrAaOAhMO3pVFhERSSzxdFNjrZ2NE7jR+x6J2rbATS382TNbWF50zg6HzlnL6Zy1nM5Zy+mcRTFOjoqIiIhbNB2miIiIy1wJ4+am15TGjDHrjDFLjTGLjTGful2f9sgY87gxZnv0LXPGmO7GmHeMMV9G1t3crGN708Q5+5kxZlPkb22xMWaKm3VsT4wx/Ywxc4wxK40xy40xP4zs199ZEw5xzvR3FqXNu6kj02sWA+fg3BK1ALjUWruiTSvSwRhj1gFjrLWd8b68uBhjJgClOLPB5Uf23Q/sttbeF/ni181ae7ub9WxPmjhnPwNKrbW/cbNu7VFkZsFca+0iY0wGsBC4ELgG/Z3FdIhz9m30d1bLjZZxPNNrirSYtXYusLvB7guAJyPbT+L8IyARTZwzaYK1dou1dlFk+wCwEme2Qf2dNeEQ50yiuBHGmjrz8Fjgn8aYhZGZzCQ+OTX3vEfW2S7Xp6O4OfIEtsfV5RqbMWYAMBqYj/7O4tLgnIH+zmq5EcZxTZ0pjYy31p6A84SsmyLdiyJHw8PAYGAUsAX4X3er0/4YY9KBl4EfWWv3u12fjiDGOdPfWRQ3wjiuqTOlPmvt5sh6O/A3nO5+ad62mieIRdbbXa5Pu2et3WatDVlrw8Cf0N9aPcYYP06oPGutfSWyW39nhxDrnOnvrD43wjie6TUlijEmLTLwAWNMGjAR0EM24vMacHVk+2rgVRfr0iE0ePzpN9DfWi1jjAH+DKy01v5f1CH9nTWhqXOmv7P6XJn0IzKE/bfUTa/5321eiQ7EGDMIpzUMzqxpz+mcNWaM+QtQiPM0mG3APcDfgReB/sAG4FvWWg1YimjinBXidB1aYB3wfc017zDGnAq8DywFwpHdd+FcA9XfWQyHOGeXor+zWpqBS0RExGWagUtERMRlCmMRERGXKYxFRERcpjAWERFxmcJYRETEZQpjERERlymMRUREXKYwFhERcdn/B86m/CTGfDIwAAAAAElFTkSuQmCC\n",
      "text/plain": [
       "<Figure size 576x360 with 1 Axes>"
      ]
     },
     "metadata": {
      "needs_background": "light"
     },
     "output_type": "display_data"
    },
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "Learning Rate: 0.001\n"
     ]
    },
    {
     "data": {
      "image/png": "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\n",
      "text/plain": [
       "<Figure size 576x360 with 1 Axes>"
      ]
     },
     "metadata": {
      "needs_background": "light"
     },
     "output_type": "display_data"
    },
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "Learning Rate: 0.003\n"
     ]
    },
    {
     "data": {
      "image/png": "iVBORw0KGgoAAAANSUhEUgAAAeMAAAEzCAYAAAACSWsXAAAABHNCSVQICAgIfAhkiAAAAAlwSFlzAAALEgAACxIB0t1+/AAAADh0RVh0U29mdHdhcmUAbWF0cGxvdGxpYiB2ZXJzaW9uMy4xLjIsIGh0dHA6Ly9tYXRwbG90bGliLm9yZy8li6FKAAAgAElEQVR4nO3deXRc5Z3m8e+v9tJqy7sk25LBC94wBswaMEswhCQkk6UhhLAkYZis3TMnk5DMydLp0xs9k+k5QyAMcWg6TALNcDokuCEdYsVsBoOxsY0XjFd5X7XX/s4ft2TJsmyXkOyrkp7POfdU3Vuvbv30Yvz4bu9rzjlERETEPwG/CxARERnuFMYiIiI+UxiLiIj4TGEsIiLiM4WxiIiIzxTGIiIiPjttGJvZYjPbb2ZrT/K5mdn/MrPNZvaOmc0f+DJFRESGrkKOjB8DbjzF5zcBU/PLvcBD/S9LRERk+DhtGDvnlgGHT9HkFuBx51kOjDCzCQNVoIiIyFA3ENeMa4Cd3dYb89tERESkAKEB2If1sq3XMTbN7F68U9nEYrELJ02aNABfP3zlcjkCAd2D11/qx/5TH/af+rD/iqEPN23adNA5N6bn9oEI40ZgYrf1WmB3bw2dc48AjwBMnz7dbdy4cQC+fvhqaGhg4cKFfpdR9NSP/ac+7D/1Yf8VQx+a2fbetg/EPyGeBb6Qv6v6UqDJObdnAPYrIiIyLJz2yNjMfgUsBEabWSPwAyAM4Jx7GFgCfATYDLQDd5+pYkVERIai04axc+6203zugK8OWEUiIiLDzEBcMxYRkWEgnU7T2NhIIpHwu5ReVVZWsn79er/LACAWi1FbW0s4HC6ovcJYREQK0tjYSHl5OXV1dZj19iCNv1paWigvL/e7DJxzHDp0iMbGRurr6wv6mcF9D7iIiAwaiUSCUaNGDcogHkzMjFGjRvXpDILCWERECqYgLkxf+0lhLCIiRaOsrMzvEs4IhbGIiIjPFMYiIlJ0nHN861vfYvbs2cyZM4cnn3wSgD179nDVVVcxb948Zs+ezUsvvUQ2m+Wuu+461vYnP/mJz9WfSHdTi4hI0XnmmWdYtWoVq1ev5uDBg1x88cXMnz+fZ599lkWLFvG9732PbDZLe3s7q1atYteuXaxduxaAo0eP+lz9iRTGIiLSZz/67Tre3d08oPucWV3BDz42q6C2L7/8MrfddhvBYJBx48Zx9dVXs3LlSi6++GLuuece0uk0n/jEJ5g3bx5Tpkxhy5YtfP3rX+fmm2/mhhtuGNC6B4JOU4uISNHxBn880VVXXcWyZcuoqanhjjvu4PHHH2fkyJGsXr2ahQsX8uCDD/KlL33pLFd7ejoyFhGRPiv0CPZMueqqq/jZz37GnXfeyeHDh1m2bBk/+MEP2L59OzU1NXz5y1+mra2NlStX8pGPfIRIJMKnPvUpzjnnHO666y5fa++NwlhERIrOJz/5SV577TXOP/98zIy///u/Z9y4cTzzzDM88MADhMNhysrKePzxx9m1axd33303uVwOgL/5m7/xufoTKYxFRKRotLa2At6gGg888AAPPPDAsc9aWlq48847ufPOO0/4uZUrV561Gj8IXTMWERHxmcJYRETEZwpjERERnymMRUREfKYwFhER8ZnCWERExGcKYxEREZ8pjEVEZMg61fzH27ZtY/bs2WexmpNTGIuIiPhMYSwiIkXj29/+Nj/96U+Prf/whz/kRz/6Eddddx0f+tCHmDNnDr/5zW/6vN9EIsHdd9/NnDlzuOCCC1i6dCkA69atY8GCBcybN4+5c+fy3nvv0dbWxs0338z555/P7Nmzj82l3B8aDlNERPru374De9cM7D7Hz4Gb/vaUTW699Vb+/M//nK985SsAPPXUUzz//PP8xV/8BWZGMpnk0ksv5eMf/zhmVvBXP/jggwCsWbOGDRs2cMMNN7Bp0yYefvhhvvnNb3L77beTSqXIZrMsWbKE6upqnnvuOQCampo+4C/cRUfGIiJSNC644AL279/P7t27Wb16NSNHjmTChAl897vf5bLLLuP6669n165d7Nu3r0/7ffnll7njjjsAmDFjBpMnT2bTpk1cdtll/PVf/zV/93d/x/bt24nH48yZM4c//OEPfPvb3+all16isrKy37+XjoxFRKTvTnMEeyZ9+tOf5umnn2bv3r3ceuutPPHEExw4cIBly5ZRVVVFXV0diUSiT/s82fzIn/vc57jkkkt47rnnWLRoEY8++ijXXnstb731FkuWLOH+++/nhhtu4Pvf/36/fieFsYiIFJVbb72VL3/5yxw8eJA//elPPPXUU4wdO5ZwOMzSpUvZvn17n/d51VVX8cQTT3DttdeyadMmduzYwfTp09myZQtTpkzhG9/4Blu2bOGdd95hxowZVFVV8fnPf56ysjIee+yxfv9OCmMRESkqs2bNoqWlhZqaGiZMmMDtt9/Oxz72Ma6++mrmz5/PjBkz+rzPr3zlK9x3333MmTOHUCjEY489RjQa5cknn+SXv/wl4XCY8ePH8/3vf58VK1bwrW99i0AgQDgc5qGHHur376QwFhGRorNmTdfNY6NHj+a1116jpaWF8vLy49p1zn/cm7q6OtauXQtALBbr9Qj3/vvv5/777z9u26JFi1i0aFE/qj+RbuASERHxmY6MRURkSFuzZs2xO6U7RaNRXn/9dZ8qOpHCWEREhrQ5c+awatUqv8s4JZ2mFhGRgp3sESA5Xl/7SWEsIiIFicViHDp0SIF8Gs45Dh06RCwWK/hndJpaREQKUltbS2NjIwcOHPC7lF4lEok+BeCZFIvFqK2tLbi9wlhERAoSDoepr6/3u4yTamho4IILLvC7jA9Ep6lFRER8pjAWERHxmcJYRETEZwpjERERnymMRUREfKYwFhER8ZnCWERExGcKYxEREZ8pjEVERHymMBYREfFZQWFsZjea2UYz22xm3+nl80oz+62ZrTazdWZ298CXKiIiMjSdNozNLAg8CNwEzARuM7OZPZp9FXjXOXc+sBD472YWGeBaRUREhqRCjowXAJudc1uccyng18AtPdo4oNzMDCgDDgOZAa1URERkiCpk1qYaYGe39Ubgkh5t/jfwLLAbKAf+zDmX67kjM7sXuBdgzJgxNDQ0fICSpVNra6v6cACoH/tPfdh/6sP+K+Y+LCSMrZdtPWeWXgSsAq4FzgH+3cxecs41H/dDzj0CPAIwffp0t3Dhwj4XLF0aGhpQH/af+rH/1If9pz7sv2Luw0JOUzcCE7ut1+IdAXd3N/CM82wGtgIzBqZEERGRoa2QMF4BTDWz+vxNWbfinZLubgdwHYCZjQOmA1sGslAREZGh6rSnqZ1zGTP7GvACEAQWO+fWmdl9+c8fBn4MPGZma/BOa3/bOXfwVPttSvY80y0iIjI8FXLNGOfcEmBJj20Pd3u/G7ihL198JOnYebidiVUlffkxERGRIcfXEbj+6dVtfn69iIjIoOBbGJeGjSdX7KQ1qceRRURkePMtjCsiRksyw7+8ufP0jUVERIYw38I4GoQLJ4/ksVe3kc3pZi4RERm+fL1mfM8V9Ww/1M4fN+z3swwRERFf+RrGi2aNo7oyxs9f1iPJIiIyfPkaxqFggDsvr2P5lsOs293kZykiIiK+8TWMAW69eBIlkSC/eGWb36WIiIj4wvcwriwJ8+kLa3l21W4OtCT9LkdEROSs8z2MAe66vI5UNscvl2/3uxQREZGzblCE8ZQxZVw7YyxPvL6dRDrrdzkiIiJn1aAIY4AvXlnPwdYUv13dc3ZGERGRoW3QhPHl54xi+rhyFr+yDec0CIiIiAwfgyaMzYx7rqxj/Z5mXttyyO9yREREzppBE8YAt8yroao0wuKXt/ldioiIyFkzqMI4Fg5y+yWTeHHDPrYdbPO7HBERkbNiUIUxwB2XTiYUMB7TXMciIjJMDLowHlsR42Nzq/mXN3fSnEj7XY6IiMgZN+jCGODuK+ppS2V5aoXmOhYRkaFvUIbxnNpKFtRV8YtXtpHJ5vwuR0RE5IwalGEMcM+V9ew62sEf1u/zuxQREZEzatCG8YdnjqN2ZFyPOYmIyJA3aMM4GDDuuryON7YdZk2j5joWEZGha9CGMcBnL55IaSTI4le2+l2KiIjIGTOow7giFuazF0/kd+/sZl9zwu9yREREzohBHcbgzXWcyTnNdSwiIkPWoA/jyaNKuf68cTzx+g7NdSwiIkPSoA9jgHuuqOdwW4p/fXuX36WIiIgMuKII40unVDFzQgWLX9mquY5FRGTIKYow9uY6rmfTvlZe2ay5jkVEZGgpijAG+Nj5ExhdFuHnL2/xuxQREZEBVTRhHA0F+fylk1m68QDvH2j1uxwREZEBUzRhDHD7JZOJBAM89so2v0sREREZMEUVxmPKo9wyr5qn32qkqV1zHYuIyNBQVGEM3lzHHeksv1qxw+9SREREBkTRhfHM6goumzKKf3p1G2nNdSwiIkNA0YUxeHMd72lK8MK6vX6XIiIi0m9FGcbXzRjL5FElLH5ZszmJiEjxK8owDgSMuy+vY+WOo7y944jf5YiIiPRLUYYxwKcvmkh5NMRiPeYkIiJFrmjDuCwa4s8unsiSNXvY09ThdzkiIiIfWNGGMcCdl9fhnOPx1zTXsYiIFK+iDuOJVSUsmjWe//v6DtpTGb/LERER+UCKOozBe8ypqSPNMys117GIiBSnog/jiyaPZE5NJb94ZSu5nOY6FhGR4lNQGJvZjWa20cw2m9l3TtJmoZmtMrN1ZvangS3zlLXxxSvref9AG8veO3C2vlZERGTAnDaMzSwIPAjcBMwEbjOzmT3ajAB+CnzcOTcL+MwZqPWkPjJnAmPLo/xcg4CIiEgRKuTIeAGw2Tm3xTmXAn4N3NKjzeeAZ5xzOwCcc/sHtsxTi4QCfOGyybz03kE27Ws5m18tIiLSb4WEcQ2ws9t6Y35bd9OAkWbWYGZvmdkXBqrAQn3ukslEQwF+oUFARESkyIQKaGO9bOt5p1QIuBC4DogDr5nZcufcpuN2ZHYvcC/AmDFjaGho6HPBp3Lp+ABPv7mDK8oOUhbpreyhpbW1dcD7cDhSP/af+rD/1If9V8x9WEgYNwITu63XArt7aXPQOdcGtJnZMuB84Lgwds49AjwCMH36dLdw4cIPWHbvqs9r4YafLGN7eCJfXXjugO57MGpoaGCg+3A4Uj/2n/qw/9SH/VfMfVjIaeoVwFQzqzezCHAr8GyPNr8BPmRmITMrAS4B1g9sqac3bVw5H5o6msdf20Yqo7mORUSkOJw2jJ1zGeBrwAt4AfuUc26dmd1nZvfl26wHngfeAd4AHnXOrT1zZZ/cPVfUs685yb+t3ePH14uIiPRZIaepcc4tAZb02PZwj/UHgAcGrrQP5uppY5gyppSfv7yVj59fjdnQv3YsIiLFrehH4OopEDDuvqKedxqbeGu75joWEZHBb8iFMcCn5tdQEQux+BUNAiIiIoPfkAzjkkiI2y6ZxPNr99J4pN3vckRERE5pSIYxwJ2X1WFmmutYREQGvSEbxtUj4tw0ezy/emMHbUnNdSwiIoPXkA1j8OY6bklkePqtRr9LEREROakhHcbzJ41k3sQRmutYREQGtSEdxuAdHW871M7SjWd1IikREZGCDfkwvmn2eCZUxjTXsYiIDFpDPozDwQBfuKyOV98/xPo9zX6XIyIicoIhH8YAty2YSCwc4BcaBERERAahYRHGI0oifGp+Lf+6ajcHW5N+lyMiInKcYRHGAHdfUU8qk+OJ5Tv8LkVEROQ4wyaMzx1bxsLpY/jn5dtJZrJ+lyMiInLMsAlj8OY6Ptia5HerNdexiIgMHsMqjD80dTTnji1j8StbcU6DgIiIyOAwrMLYzLjninrW7W7mja2H/S5HREQEGGZhDPAf5tcwsiSsQUBERGTQGHZhHAsH+dwlk/j39fvYcUhzHYuIiP+GXRgD3HFpHUEzHnt1m9+liIiIDM8wHl8Z4+a5E3jqzZ20JNJ+lyMiIsPcsAxjgC9eWU9rMsNTb2quYxER8dewDeO5tSO4aPJIHnt1K1nNdSwiIj4atmEM3lzHOw938If1+/wuRUREhrFhHcY3zBxHzYg4i/WYk4iI+GhYh3EoGOCuy+t4feth1u5q8rscEREZpoZ1GAN89uKJlESCLNZcxyIi4pNhH8aV8TCfubCW367ezf6WhN/liIjIMDTswxjgrivqyeQcv9RcxyIi4gOFMVA/upTrZozlieXbSaQ117GIiJxdCuO8e66o51BbimdX7fa7FBERGWYUxnmXnTOKGePLNdexiIicdb6FcbxjD6x4FI7u9KuE43TOdbxhbwuvvX/I73JERGQY8S2MA7kUPPdf4H/OhoeuhBd/DDtXQC7nV0l8fF41o0ojmutYRETOKt/CuK10MnztTfjwjyFWCS//BH5+PfzDVPjXr8C7v4Fky1mtKRYOcvulk3lxw362Hmw7q98tIiLDV8jXbx891Vuu+AZ0HIHNL8Km52HDc7DqCQiEoe5KmHYjTFsEVfVnvKTPXzqJhxo289grW/nRLbPP+PeJiIj4G8bdxUfCnE97SzYDO1/3gnnTC/D8t71lzAwvlKfdCLULIDjw5Y8tj/Gx86v5l7ca+c83TKcyHh7w7xAREelu8IRxd8EQ1F3hLTf8GA5v8UJ50/Pw2k/hlX/0wvvcD3vhfO71EB8xYF9/zxX1PLNyF3cufoOPzp3ANTPGMmV0KWY2YN8hIiLSaXCGcU9VU+DS/+QtiWZ4/49eOL/3Aqx5CiwIky/Pn86+EUaf26+vm11TyX+7+TyeXLGTv3puPX/13HomVZVw7YyxXDNjLJfUVxELBwfolxMRkeGuOMK4u1gFzPqEt+SysOst74h54/Pw++95S9U5XihPvxEmXQbBvp9q/tKHpvClD01h5+F2Gjbu548b9vOrN3bw2KvbiIeDXHHuaK6ZMYZrZ4xlQmX8DPyiIiIyXBRfGHcXCMLEBd5y3ffh6I6u09kr/g8sfxCilXDudV44T/0wlFT16SsmVpVwx2V13HFZHR2pLMu3HOKPG7xw/sP6fQDMGF9+7Kj5gokjCAU1loqIiBSuuMO4pxGTYMGXvSXZClv/BBv/Dd77Pax7Bizg3fg1PX86e8wM6MN14HgkyDX50P1L53hvfytL88H8s2Vb+GnD+1TGw1w9zTtivnraGEaWRs7gLywiIkPB0Arj7qJlMONmb8nlYM+q/N3Zz8MffugtIyZ3PTZVdyWEogXv3syYNq6caePK+Y9Xn0NTR5qX3jvA0g0HaNi4n2dX7yZgMG/iiGNHzTMnVOgmMBEROcHQDePuAgGome8t13wXmnfnT2e/ACsfhzd+BpEyOOea/OnsG6BsbJ++ojIe5qNzq/no3GpyOcc7u5r444b9LN2wn3/4/Sb+4febGF8R45oZY1g4fSxXnjua0ujw6H4RETm14ZkGFdVw0d3eku6Arcu6nmle/1vAoOZC72i59iKouQgqJhS8+0DAmDdxBPMmjuA/f3ga+1sSNGw8wNIN+/nt6j386o2dRIIBLplSxTXTvaPm+tGlZ+73FRGRQa2gMDazG4F/BILAo865vz1Ju4uB5cCfOeeeHrAqz6RwPD+QyCJwDvau6Xps6rUHIZf22lXU5I+uL/ICesI871R4AcaWx/jsRRP57EUTSWVyvLn98LFrzX/5u3f5y9+9S/3oUq6ZPpZrZ4xlQX0VkZBuAhMRGS5OG8ZmFgQeBD4MNAIrzOxZ59y7vbT7O+CFM1HoWWEGE+Z6y9XfgnTCC+ddb0Ljm97r+t/m2wZg7MzjA3rMDO8O71OIhAJcfs5oLj9nNN+7eSY7DrWzNP/o1C9f387iV7ZSGvEeneq81jyuInYWfnkREfFLIUfGC4DNzrktAGb2a+AW4N0e7b4O/D/g4gGt0E/hGEy82Fs6tR3ynm3uDOh3n/WuO4N33bn6guMDuqL6lF8xaVQJd15ex52X19GeyvDq5kMs3ehda/79u96jU7OqK46dzp43cQTBgG4CExEZSgoJ4xqg+6TDjcAl3RuYWQ3wSeBahlIY96Z0FEy7wVvAO7V9eEvXkXPjm96QnZ2nt8urofZC7xp0zUVeWJ/k9HZJJMT1M8dx/cxxOOfYuK/l2E1gP23YzP9eupmq0ghXTxvDNTPGEki5s/RLi4jImWTOnfovdDP7DLDIOfel/PodwALn3Ne7tfkX4L8755ab2WPA73q7Zmxm9wL3AowZM+bCp556asB+kcEkkE1R2raViuZNx5Z4Yi8AjgBtpRNprphGS/k0mium0VY60RvS8xTa0o41B7OsPpBhzYEsrfmsjwWhKmaMjBkjYwFGRjvfGyOjRlUsQFkEAnqk6qRaW1spKyvs+r/0Tn3Yf+rD/iuGPrzmmmvecs5d1HN7IWF8GfBD59yi/Pr9AM65v+nWZivQ+bf9aKAduNc5968n2+/06dPdxo0b+/p7FK+2Q7B7ZdcR9K63vGkjAcKl3hFz9yPoypqT7iqbc6xuPMqvX1xByaga9jYl2NucYF9zgv0tSbK54/+bhoPG2PIYEypjjKuMMaEixvjK/FIRY1x+Ga43jTU0NLBw4UK/yyhq6sP+Ux/2XzH0oZn1GsaFnKZeAUw1s3pgF3Ar8LnuDZxzxyYa7nZkfNIgHpZKR3nDcU79sLfeeXp711tdAb38IcimvM/LJ3jBXHuR91p9AUTLAQgGjPmTRtJcH2HhwlnHfU025zjYmmRPU4K9TV5A7zn22sG7u5t5cf0+EuncCSWOLoscF9ATKjtf44yvjDKuIkZ5TFNKiogMtNOGsXMuY2Zfw7tLOggsds6tM7P78p8/fIZrHJrMYNQ53jL3s962TBL2rj3+7u0Nv8u3D3h3a3cLaMtlT9htMGDHjnSZ2PtXO+do7siwNx/Q3QN7b1OCxiMdvLX9CEfa0yf8bFk0xLiKKBMq412BnQ/wzvAeVRohoJvMREQKVtBzxs65JcCSHtt6DWHn3F39L2uYCkW9U9W1F8Il/9Hb1n4Ydq3sCugNz8Hb/wzAVQTg1Yh3vTmQX469D/WyPQSBAGZBKgMhKgNBpvdsEwnBuCBMCJIlQCID7VmjIw3tGUdrGtpSjtaDjpY9jtaUo80F2EiAdwmQdUEIBIhHI5TEooSipRAfgcVHECipIlw6kkjZKOIVVZSXxKgsCVMRC1MRD1MaCWq4UBEZlobnCFzFpKQKpl7vLeCd3j6yFRrfYsebLzC5dgK4nDedZC4DLpt/n+32vrftmfz7nPc+k+y2PQcuSzCXoTSXpbT7z3buiywEs7hY13Zz3Y7UM0BrfjmJFheniVKOulK2u1KaKaU9WEYyVEEqXEkmWoGLjoDYCAIlIwiWVhEpqyJeXkV5aexYiHuvIeLhQRzmmSSk2iDZAqlWbyKTVGu3922Qaun2vrWrbbgEqud5lyqq5/d55jERGfwUxsXGDKqmQNUUth4ew2Sfb1Y4IfpyuW7hn4FUOySOQsdRsu2HSTQfJtl6kHTrETJtR6DjCJWJJkYmjxJOHSKS2Uos00Ikk4SOk39vZ5A3uVK2uFKaKKXFykgEy0mFK0iHK8jFKslFR+aDfCSh0ipi5VWUx6NdIR4Lsbctx45D7QQCEAoECJgjmE0SyrYTyLQRSrcRSLcRzL8GUqcJz1TbiWGbO/GUf+8dGvQefYuUQ6TUe39ke9flCvAmOKm+oNsyD2KVJ92lc4501pHJ5UhnHOlcjnQ2RybrSOVf09lcfnFksrnjt+cc6UzO+/n8tu4/m83laD+QZsLeFs4dW6bn4EU+AIWxDKxAAALdpo2MlkP5OMC74aA0v5xWOnEsxDtfM22HSbQeJtVymGz7EcJthxmdOMqYZBOh5CHC6a3EMs2EUylIAW2977rZxWnOB/lh4swgTfL1BKXWQZwEpSQI2Yk3uPUm5YK0E6fN4rQTo4M4HRan3SpJ2Dg6rIREME4yHCcRiJOwEhKBEpLBOKlAibcE46SCJaSCpeQCEULBAAEzggHzrr2XQqiimZqO95iU2MDkxEambFzOuHe77pHcYdVssHNZZ1NY66awJldHczZCJuvI5M7O8+iPrllGPBxkVnUFc2ormVtbyZyaSupHK6BFTkdhLINTOAbh8VA+/timEFDQE4QnBPkR6DhKuu0wqdbD5FqPEG8/QqzjCOOTLRztyBCtPIdksISWYEk+GLuCMhkoIWH510CcpMXpCJTQbnEyhMjmIOcc2Zwj6xzZrPea61zPOXLOkcm6bu0gl/OOVnM57y74bMaRc2nvfa5rfwCRYID3gzMIR2cSjgcIh4xK18q5mc2ck95EXWojFyfWc0NmGQAO42BZHfvKzmN/+SwOV87iaPk0LFJCJGiEggHCwQDhoBEOBggFjHAoQDjgbQsFA0SCAUL5z4+1C1p+e35bIIADnlyylFj1NN5pbGLtriZ+9cYOfvGK9w+a0kiQWTWVzK2pZE4+oOtGleomP5FuFMYy9PQS5ADh/NLTmiJ4NvHkrj9+tWUf7FmF7X6bMbvfZsyuN+FA/t5LC3rjqXdef54wH8bOglDkxN32UXVZgIXza/kP82sByGRzvH+gjXcaj7J2VxPv7Grin5dvJ5nxAro8GmJ2jXf03Pk6qapk8F7zFznDFMYiQ0n5OCjPz0IG3g1/zbth99tdS7c78glGYNys469BjzkPgv37qyEUDDB9fDnTx5fzmYu8Z+zS2Rzv7Wtlza6jrNnVxJrGJn7xyjZSWS+gK+Nh5nQ7ep5TU0ntyLgCWoYFhbHIUGbmjeZWWQPnfdTb5hwc3eGNCNcZ0GuehjcXe5+HYjB+7vEBPXrqaWckO51wMMDM6gpmVlfwZ/kR7FOZHJv2tfBOY5MX0LuO8n+WbTl2nXtkSZg5tSOYU1PBnJoRzK2tZEJlTAEtQ47CWGS4MYORk71l1ie9bbmc98jc7re959p3vw1v/xLe+Jn3ebgUJpzfNStZ9QUwst67Ya8fIqEAs6srmD2+BOaNhEySRKKNrXsO8f6eQ2zdc4gd+99n7ftNbHJJfkeaUTFH/YggkyuC1JYbE0qNsmD+8bxMotuS7HrNZb2bCWOVEKvwXqMV+fcj8taVJ20AAAzNSURBVO97fBYp9fpK5CxQGIuIF6qdI8LN+bS3LZeFg+91O8W9Et78OSx/0Ps8WgnV58OE86nbtQ9SL546ENMdx68fe+3wnnfPiwHn5Zdjul/szwGH80tekjBZi+BCUQLhOOFYCaFIzDvKD8UgGIC2A3D4fUg0QaL59I+bWdAL52NBXdl7aB/3vke7Aq7HZ/M38p1unoAhzzlIt3c9FtjzmfzTrLtkC/Obm8lsrCIXjJILRMkFo2SDUbKBCJlAlKxFSAcix17TFiFlEdKESREhRZhE/jVJmIQLkyBMIhcm4UK0uzAduRCJXIh0DlLHHgn0HhvsXO98LDDV7ZHBdCZ37JJMbxTGItK7QBDGzvCWebd527JpOLDh+GvQyx+mLpeGXTFvFLlQtxDsXA/HvCPTY59HIRTv0T4K4fgp2nTbVyhGey7EhoMpVu/pYM2uFt7Z1cT7B1rpzLTxFTHvEauaSqaMKcPhjj3qlclkcZkOAslmAqkWgqlmQukWQqlmQulWQukWIukWItlWIpkWom2tRJubiGV3Ecu2Ec+1Es+d5Nm5bpJEaKWUViuhhRKaXYn3jLwrpdnFaXJxmlwJLa6ElEV4/pVXKY1HKYtHKYvHKI/HKS+JUFkap6IkRmVpnBFlMSriMQKh8PEj7p0w8l7PbWdgIphMMh+GLd1C8oOs5xdX4COFgRgJK6HdYrS6OM25KEezUbJuFJGWNFHrIEo6v6SImvc+TpoRpIlagc/9n6oGwseCPJ0P94x5SzYQJROIkA1FyUW89VwwigtGWXCS/SmMRaRwwTCMn+Mt87/gbctlafjTMhZec81ZLaUEmF8J88/p2taazPDu7mbeaey6Sezf391XwN4iwChgFGYQDniPcQUD3iNdwYARDhjBoBEOd65DRSBBhbVRQQfltFNubZS5dspop4w2SnJtlDrvNZ5rY2KulXj2CLFcG9FMK2GXPL6MDNCSXwacFRDagfx66MShdM26DWjT0rfBbILR/GA2pbhIGelgKclgOR3xsbTFY7Tk4jTlohzJRDiUjnAgGWZfMszeRIhWF6OVOG0uRhtx2ogRCoUYUxZldFmE0WVRbymPcGDXDmZMm0o4FCBy7HG8rvedSyToiJAhQpoIacIuRcSlCLkUEZcm5JKEcimCuSSWSfZ6RieSSXiDE51wpqf7a1PXeip/tugkFMYi0j+B4KC5tloWDbGgvooF9V1DhjYn0jQe7ugK10DAC9WA9zy1F7hdn53V558zKUg2Q6KJFa+9zMUXXnDc0LUul6atI0lTe5KW9g6a2xO0tido7UjS2pGkLZGkLZGivSNBRzKJy2UJkssvWULkCFqOsjCUR4yyCJSFjZKwURqCkhDEw4540JsbPRbMEegcIjeX6Rout3Po3LJx3hmOSFk+XMsgWk46VEJzLsbRTJTDmQiH0mH2JyPs6QixuyPAvrYcB1tTHGxOcrSXCWgA4uEgo8vz4VrlBeyFZRFGl0e7Aje/Xh4N9XoTX0PDXhZeWd/L3geR7/b+50thLCJDWkUszMzqQTr1ZygCodFQOpq2sp0wYe5xHxveQDeFDHbjnKM1mfFCrzXJwZYkB1uTHGhNsaPb+sHWFAcPJmlPnTjrG8CIknBX8JVF82EYoSIe5mh72tvH0SQHW1L5/SdpSWS67SE/dj0JyqOhYz8/dWwZl00ZdewotjNgx+TXSyLDO46G928vIjJEmBnlsTDlsTD1o08/6Gx7KsPBlhQHWjtDuitgO5d1u5s52JKkJdkVtpXx8LGgPq+6gqtOOF3ctR4L9+9xuOFEYSwiMgyVREJMGhVi0qiS07ZNpLM0J9KMiEeIhM7AjWCiMBYRkVOLhYM6yj3D9E8cERERnymMRUREfKYwFhER8ZnCWERExGcKYxEREZ8pjEVERHymMBYREfGZwlhERMRnCmMRERGfKYxFRER8pjAWERHxmcJYRETEZwpjERERnymMRUREfKYwFhER8ZnCWERExGcKYxEREZ8pjEVERHymMBYREfGZwlhERMRnCmMRERGfKYxFRER8pjAWERHxmcJYRETEZwpjERERnymMRUREfKYwFhER8ZnCWERExGcKYxEREZ8pjEVERHxWUBib2Y1mttHMNpvZd3r5/HYzeye/vGpm5w98qSIiIkPTacPYzILAg8BNwEzgNjOb2aPZVuBq59xc4MfAIwNdqIiIyFBVyJHxAmCzc26Lcy4F/Bq4pXsD59yrzrkj+dXlQO3AlikiIjJ0hQpoUwPs7LbeCFxyivZfBP6ttw/M7F7gXoAxY8bQ0NBQWJXSq9bWVvXhAFA/9p/6sP/Uh/1XzH1YSBhbL9tcrw3NrsEL4yt7+9w59wj5U9jTp093CxcuLKxK6VVDQwPqw/5TP/af+rD/1If9V8x9WEgYNwITu63XArt7NjKzucCjwE3OuUMDU56IiMjQV8g14xXAVDOrN7MIcCvwbPcGZjYJeAa4wzm3aeDLFBERGbpOe2TsnMuY2deAF4AgsNg5t87M7st//jDwfWAU8FMzA8g45y46c2WLiIgMHYWcpsY5twRY0mPbw93efwn40sCWJiIiMjxoBC4RERGfKYxFRER8pjAWERHxmcJYRETEZwpjERERnymMRUREfKYwFhER8ZnCWERExGcKYxEREZ8pjEVERHymMBYREfGZwlhERMRnCmMRERGfKYxFRER8pjAWERHxmcJYRETEZwpjERERnymMRUREfKYwFhER8ZnCWERExGcKYxEREZ8pjEVERHymMBYREfGZwlhERMRnCmMRERGfKYxFRER8pjAWERHxmcJYRETEZwpjERERnymMRUREfKYwFhER8ZnCWERExGcKYxEREZ8pjEVERHymMBYREfGZwlhERMRnCmMRERGfKYxFRER8pjAWERHxmcJYRETEZwpjERERnymMRUREfKYwFhER8ZnCWERExGcKYxEREZ8VFMZmdqOZbTSzzWb2nV4+NzP7X/nP3zGz+QNfqoiIyNB02jA2syDwIHATMBO4zcxm9mh2EzA1v9wLPDTAdYqIiAxZhRwZLwA2O+e2OOdSwK+BW3q0uQV43HmWAyPMbMIA1yoiIjIkFRLGNcDObuuN+W19bSMiIiK9CBXQxnrZ5j5AG8zsXrzT2ABJM1tbwPfLyY0GDvpdxBCgfuw/9WH/qQ/7rxj6cHJvGwsJ40ZgYrf1WmD3B2iDc+4R4BEAM3vTOXdRAd8vJ6E+HBjqx/5TH/af+rD/irkPCzlNvQKYamb1ZhYBbgWe7dHmWeAL+buqLwWanHN7BrhWERGRIem0R8bOuYyZfQ14AQgCi51z68zsvvznDwNLgI8Am4F24O4zV7KIiMjQUshpapxzS/ACt/u2h7u9d8BX+/jdj/SxvZxIfTgw1I/9pz7sP/Vh/xVtH5qXoyIiIuIXDYcpIiLiM1/C+HTDa8qpmdlEM1tqZuvNbJ2ZfdPvmoqVmQXN7G0z+53ftRQjMxthZk+b2Yb8n8fL/K6p2JjZX+T/P15rZr8ys5jfNRUDM1tsZvu7PyJrZlVm9u9m9l7+daSfNfbFWQ/jAofXlFPLAP/FOXcecCnwVfXhB/ZNYL3fRRSxfwSed87NAM5HfdknZlYDfAO4yDk3G+8m2Vv9rapoPAbc2GPbd4AXnXNTgRfz60XBjyPjQobXlFNwzu1xzq3Mv2/B+wtQI571kZnVAjcDj/pdSzEyswrgKuDnAM65lHPuqL9VFaUQEDezEFBCL2M0yImcc8uAwz023wL8U/79PwGfOKtF9YMfYayhMweQmdUBFwCv+1tJUfqfwH8Fcn4XUqSmAAeAX+RP9T9qZqV+F1VMnHO7gH8AdgB78MZo+L2/VRW1cZ1jXORfx/pcT8H8COOChs6U0zOzMuD/AX/unGv2u55iYmYfBfY7597yu5YiFgLmAw855y4A2iii04KDQf6a5i1APVANlJrZ5/2tSvzgRxgXNHSmnJqZhfGC+Ann3DN+11OErgA+bmbb8C6VXGtmv/S3pKLTCDQ65zrPyjyNF85SuOuBrc65A865NPAMcLnPNRWzfZ0zBuZf9/tcT8H8CONChteUUzAzw7tOt9459z/8rqcYOefud87VOufq8P4M/tE5pyOSPnDO7QV2mtn0/KbrgHd9LKkY7QAuNbOS/P/X16Gb4PrjWeDO/Ps7gd/4WEufFDQC10A62fCaZ7uOIncFcAewxsxW5bd9Nz9SmsjZ9HXgifw/rLegoXD7xDn3upk9DazEe0ribYp4FKmzycx+BSwERptZI/AD4G+Bp8zsi3j/0PmMfxX2jUbgEhER8ZlG4BIREfGZwlhERMRnCmMRERGfKYxFRER8pjAWERHxmcJYRETEZwpjERERnymMRUREfPb/ASdnijHxdugmAAAAAElFTkSuQmCC\n",
      "text/plain": [
       "<Figure size 576x360 with 1 Axes>"
      ]
     },
     "metadata": {
      "needs_background": "light"
     },
     "output_type": "display_data"
    },
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "Learning Rate: 0.01\n"
     ]
    },
    {
     "data": {
      "image/png": "iVBORw0KGgoAAAANSUhEUgAAAeoAAAEzCAYAAAD+XEDdAAAABHNCSVQICAgIfAhkiAAAAAlwSFlzAAALEgAACxIB0t1+/AAAADh0RVh0U29mdHdhcmUAbWF0cGxvdGxpYiB2ZXJzaW9uMy4xLjIsIGh0dHA6Ly9tYXRwbG90bGliLm9yZy8li6FKAAAgAElEQVR4nO3deXxV1b338c86JyfzPIckzBCGMAs4MloBbbXe2lusRWtrqY/VDk9rHXqvrdfO1Ke3g5Vaa62tVanaaitIrcrghBRKGETCDAFCJobMw8l6/tgnEBAkCSc5Oznf9+u1X2faZ+e3Mn3PWnvvtY21FhEREXEnT6gLEBERkbNTUIuIiLiYglpERMTFFNQiIiIupqAWERFxMQW1iIiIi50zqI0xjxljyowxm8/yujHG/NwYs8MYs9EYMzH4ZYqIiISnjvSoHwfmfsjr84BhgWUh8PD5lyUiIiLQgaC21q4Cqj5klWuAJ6zjHSDZGJMTrAJFRETCWTD2UecC+9s9Lgk8JyIiIucpIgjbMGd47ozzkhpjFuIMjxMdHT2pf//+QfjyvVNrayseT/gey6f2h2/7w7ntoPaHe/uLi4srrLUZnXlPMIK6BMhv9zgPOHimFa21jwCPABQUFNht27YF4cv3TitWrGDGjBmhLiNk1P7wbX84tx3U/nBvvzFmb2ffE4yPNS8CNwaO/r4QOGatPRSE7YqIiIS9c/aojTFPATOAdGNMCfBtwAdgrV0MLAWuBHYAdcDN3VWsiIhIuDlnUFtrrz/H6xb4UtAqEhERkROCsY9aRETCQHNzMyUlJTQ0NHR5G0lJSWzdujWIVblTdHQ0eXl5+Hy+896WglpERDqkpKSEhIQEBg4ciDFnOuHn3Kqrq0lISAhyZe5iraWyspKSkhIGDRp03tsL32PkRUSkUxoaGkhLS+tySIcLYwxpaWnnNfLQnoJaREQ6TCHdMcH8PimoRUSk14iPjw91CT1OQS0iIuJiCmoREel1rLXceeedFBYWMmbMGJ555hkADh06xLRp0xg/fjyFhYWsXr0av9/PZz/72RPr/vSnPw1x9Z2jo75FRKTXef7559mwYQNFRUVUVFQwefJkpk2bxp/+9CfmzJnDt771Lfx+P3V1dWzYsIEDBw6wefNmAI4ePRri6jtHQS0iIp12/9+28N7B451+n9/vx+v1nvG1Uf0S+fbHRndoO2+88QbXX389Xq+XrKwspk+fztq1a5k8eTKf+9znaG5u5uMf/zjjx49n8ODB7Nq1izvuuIOrrrqKK664otN1h5KGvkVEpNdxJsX8oGnTprFq1Spyc3NZsGABTzzxBCkpKRQVFTFjxgweeughbrnllh6u9vyoRy0iIp3W0Z7v6YI14cm0adP49a9/zU033URVVRWrVq1i0aJF7N27l9zcXL7whS9QW1vL+vXrufLKK4mMjOQTn/gEQ4YM4bOf/ex5f/2epKAWEZFe59prr+Xtt99m3LhxGGP48Y9/THZ2Nr///e9ZtGgRPp+P+Ph4nnjiCQ4cOMDNN99Ma2srAD/4wQ9CXH3nKKhFRKTXqKmpAZwJRRYtWsSiRYtOef2mm27ipptu+sD71q9f3yP1dQftoxYREXExBbWIiIiLKahFRERcTEEtIiLiYgpqERERF1NQi4iIuJiCWkRExMUU1CIi0md92PWr9+zZQ2FhYQ9W0zUKahERERdTUIuISK9x11138atf/erE4+985zvcf//9zJ49m4kTJzJmzBheeOGFTm+3oaGBm2++mTFjxjBhwgRef/11ALZs2cKUKVMYP348Y8eOZfv27dTW1nLVVVcxbtw4CgsLT1wLu7toClEREem8ZXdD6aZOvy3G3wLes0RP9hiY98MPff/8+fP56le/ym233QbAkiVLePnll/na175GYmIiFRUVXHjhhVx99dUYYzpc10MPPQTApk2beP/997niiisoLi5m8eLFfOUrX+GGG26gqakJv9/P0qVL6devHy+99BIAx44d6/DX6Qr1qEVEpNeYMGECZWVlHDx4kKKiIlJSUsjJyeHee+9l7NixXH755Rw4cIDDhw93artvvPEGCxYsAGDEiBEMGDCA4uJiLrroIr7//e/zox/9iL179xITE8OYMWP45z//yV133cXq1atJSkrqjqaeoB61iIh03jl6vmdTH4TLXF533XU8++yzlJaWMn/+fJ588knKy8tZt24dPp+PgQMH0tDQ0Kltnu361p/+9KeZOnUqL730EnPmzOHRRx9l1qxZrFu3jqVLl3LPPfdwxRVXcN99951Xmz6MglpERHqV+fPn84UvfIGKigpWrlzJkiVLyMzMxOfz8frrr7N3795Ob3PatGk8+eSTzJo1i+LiYvbt20dBQQG7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\n",
      "text/plain": [
       "<Figure size 576x360 with 1 Axes>"
      ]
     },
     "metadata": {
      "needs_background": "light"
     },
     "output_type": "display_data"
    },
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "Learning Rate: 0.03\n"
     ]
    },
    {
     "data": {
      "image/png": "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\n",
      "text/plain": [
       "<Figure size 576x360 with 1 Axes>"
      ]
     },
     "metadata": {
      "needs_background": "light"
     },
     "output_type": "display_data"
    }
   ],
   "source": [
    "def plot_learning_curves(history):\n",
    "    pd.DataFrame(history.history).plot(figsize=(8,5))\n",
    "    plt.grid(True)\n",
    "    plt.gca().set_ylim(0,1)\n",
    "    plt.show()\n",
    "    \n",
    "for lr, history in zip(learning_rates, histories):\n",
    "    print(\"Learning Rate: \" + str(lr))\n",
    "    plot_learning_curves(history)"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "#### 使用sklearn实现超参数搜索\n",
    "\n",
    "使用sklearn中的RandomizedSearchCV实现\n",
    "\n",
    "步骤：\n",
    "1. 将tfkeras model 转化为 sklearn model\n",
    "2. 定义参数集合\n",
    "3. 搜索参数"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 7,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "Train on 11610 samples, validate on 3870 samples\n",
      "Epoch 1/100\n",
      "11610/11610 [==============================] - 2s 134us/sample - loss: 0.8353 - val_loss: 0.4933\n",
      "Epoch 2/100\n",
      "11610/11610 [==============================] - 1s 106us/sample - loss: 0.4418 - val_loss: 0.4220\n",
      "Epoch 3/100\n",
      "11610/11610 [==============================] - 1s 105us/sample - loss: 0.3922 - val_loss: 0.3982\n",
      "Epoch 4/100\n",
      "11610/11610 [==============================] - 1s 107us/sample - loss: 0.3839 - val_loss: 0.4111\n",
      "Epoch 5/100\n",
      "11610/11610 [==============================] - 1s 107us/sample - loss: 0.3853 - val_loss: 0.3778\n",
      "Epoch 6/100\n",
      "11610/11610 [==============================] - 1s 108us/sample - loss: 0.3853 - val_loss: 0.3851\n",
      "Epoch 7/100\n",
      "11610/11610 [==============================] - 1s 106us/sample - loss: 0.3905 - val_loss: 0.3636\n",
      "Epoch 8/100\n",
      "11610/11610 [==============================] - 1s 108us/sample - loss: 0.3583 - val_loss: 0.3589\n",
      "Epoch 9/100\n",
      "11610/11610 [==============================] - 1s 106us/sample - loss: 0.3488 - val_loss: 0.3684\n",
      "Epoch 10/100\n",
      "11610/11610 [==============================] - 1s 107us/sample - loss: 0.3505 - val_loss: 0.3622\n",
      "Epoch 11/100\n",
      "11610/11610 [==============================] - 1s 106us/sample - loss: 0.3608 - val_loss: 0.3520\n",
      "Epoch 12/100\n",
      "11610/11610 [==============================] - 1s 107us/sample - loss: 0.3589 - val_loss: 0.3443\n",
      "Epoch 13/100\n",
      "11610/11610 [==============================] - 1s 108us/sample - loss: 0.3352 - val_loss: 0.3368\n",
      "Epoch 14/100\n",
      "11610/11610 [==============================] - 1s 106us/sample - loss: 0.3328 - val_loss: 0.3382\n",
      "Epoch 15/100\n",
      "11610/11610 [==============================] - 1s 105us/sample - loss: 0.3310 - val_loss: 0.3614\n",
      "Epoch 16/100\n",
      "11610/11610 [==============================] - 1s 106us/sample - loss: 0.3341 - val_loss: 0.3555\n",
      "Epoch 17/100\n",
      "11610/11610 [==============================] - 1s 107us/sample - loss: 0.3501 - val_loss: 0.3291\n",
      "Epoch 18/100\n",
      "11610/11610 [==============================] - 1s 108us/sample - loss: 0.3338 - val_loss: 0.3404\n"
     ]
    }
   ],
   "source": [
    "# sklearn实现随机超参数搜索\n",
    "# 1.转化为sklearn model\n",
    "def build_model(hidden_layers = 1, layer_size = 30, learning_rate = 3e-3):\n",
    "    model = keras.models.Sequential()\n",
    "    model.add(keras.layers.Dense(layer_size, activation='relu',input_shape=x_train.shape[1:]))\n",
    "    for _ in range(hidden_layers - 1):\n",
    "        model.add(keras.layers.Dense(layer_size,activation='relu'))\n",
    "    model.add(keras.layers.Dense(1))\n",
    "    optimizer = keras.optimizers.Adam(learning_rate)\n",
    "    model.compile(loss='mse',optimizer=optimizer)\n",
    "    return model\n",
    "\n",
    "sklearn_model = keras.wrappers.scikit_learn.KerasRegressor(build_model)\n",
    "callbacks = [keras.callbacks.EarlyStopping(patience=5,min_delta=1e-2)]\n",
    "history = sklearn_model.fit(x_train_scaled,y_train,epochs=100,\n",
    "                            validation_data=(x_valid_scaled,y_valid),\n",
    "                            callbacks=callbacks)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 8,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "image/png": "iVBORw0KGgoAAAANSUhEUgAAAeMAAAEzCAYAAAACSWsXAAAABHNCSVQICAgIfAhkiAAAAAlwSFlzAAALEgAACxIB0t1+/AAAADh0RVh0U29mdHdhcmUAbWF0cGxvdGxpYiB2ZXJzaW9uMy4xLjIsIGh0dHA6Ly9tYXRwbG90bGliLm9yZy8li6FKAAAgAElEQVR4nO3deZhU5Z33//e3lt4XemdpoBtkUVlVaIwRAY1r4pLlCcYw6oxxnOx5nskvcXI9ZvKbmWxkJr/kitE4Th6TiVl4EicxI0nUCOIKBAKCEBCbrYFuoIFe6aWq7t8fp7ppmsYuoOjTVXxe11XXqbPUqe/N0p++z30Wc84hIiIi/gn4XYCIiMiFTmEsIiLiM4WxiIiIzxTGIiIiPlMYi4iI+ExhLCIi4rNBw9jMfmhmB81s82nWm5l918x2mNkbZnZZ8ssUERFJX4n0jJ8AbnyH9TcBk+Kv+4FHzr0sERGRC8egYeycWwUceYdNbgN+7DyvAyPMbFSyChQREUl3yRgzHgPs7TNfF18mIiIiCQglYR82wLIB77FpZvfjHcomKyvr8nHjxiXh64ePWCxGIJA+58SlW3sg/dqUbu2B9GtTurUH0q9NQ9me7du3H3bOlfVfnowwrgPG9pmvBPYPtKFz7jHgMYApU6a4bdu2JeHrh4+VK1eyYMECv8tImnRrD6Rfm9KtPZB+bUq39kD6tWko22NmuwdanoxfBZ4G/ip+VvU8oMk5dyAJ+xUREbkgDNozNrOfAQuAUjOrA74MhAGcc48Cy4GbgR1AO3Dv+SpWREQkHQ0axs65OwdZ74BPJK0iERGRC0wyxoxFROQC0N3dTV1dHYWFhWzdutXvcpLmfLQnKyuLyspKwuFwQtsrjEVEJCF1dXXk5+dTUlJCQUGB3+UkTUtLC/n5+Unbn3OOxsZG6urqqK6uTugz6XNuuoiInFcdHR2UlJRgNtAVrdLDzCgpKaGjoyPhzyiMRUQkYQrixJzpn5PCWEREUkZeXp7fJZwXCmMRERGfKYxFRCTlOOf4/Oc/z7Rp05g+fTq/+MUvADhw4ADz589n1qxZTJs2jZdeeoloNMo999zTu+23v/1tn6s/lc6mFhGRlPPUU0+xYcMGNm7cyOHDh5kzZw7z58/npz/9KTfccANf+tKXiEajtLe3s2HDBvbt28fmzZsBOHbsmM/Vn0phLCIiZ+wrv32TLfubk7rPS0YX8OX3XZrQti+//DJ33nknwWCQiooKrrnmGtauXcucOXP467/+a7q7u7n99tuZNWsWEyZMoLa2lk996lPccsstXH/99UmtOxl0mFpERFKOd/PHU82fP59Vq1YxZswYlixZwo9//GOKiorYuHEjCxYs4OGHH+a+++4b4moHp56xiIicsUR7sOfL/Pnz+cEPfsDdd9/NkSNHWLVqFUuXLmX37t2MGTOGj33sY7S1tbF+/XpuvvlmMjIy+MAHPsDEiRO55557fK19IApjERFJOXfccQevvfYaM2fOxMz45je/yciRI/nRj37E0qVLCYfD5OXl8eMf/5h9+/Zx7733EovFAPja177mc/WnUhiLiEjKaG1tBbybaixdupSlS5eetP7uu+/m7rvvPuVz69evH5L6zpbGjEVERHymMBYREfGZwlhERMRnCmMRERGfKYxFRER8pjAWERHxmcJYRETEZwpjERFJW+/0/ONdu3Yxbdq0Iazm9BTGIiIiPlMYi4hIyvjCF77A97///d75f/zHf+QrX/kK1157LZdddhnTp0/nN7/5zRnvt6Ojg3vvvZfp06cze/ZsVqxYAcCbb77J3LlzmTVrFjNmzOCtt96ira2NW265hZkzZzJt2rTeZymfC90OU0REztzvvgj1m5K7z5HT4aavv+Mmixcv5rOf/Swf//jHAVi2bBm///3v+dznPkdBQQGHDx9m3rx53HrrrZhZwl/98MMPA7Bp0yb+8pe/cP3117N9+3YeffRRPvOZz3DXXXfR1dVFNBpl+fLljB49mmeeeQaApqams2zwCeoZi4hIypg9ezYHDx5k//79bNy4kaKiIkaNGsU//MM/MGPGDK677jr27dtHQ0PDGe335ZdfZsmSJQBMnTqV8ePHs337dq688kq++tWv8o1vfIPdu3eTnZ3N9OnTef755/nCF77ASy+9RGFh4Tm3Sz1jERE5c4P0YM+nD37wg/zyl7+kvr6exYsX8+STT3Lo0CHWrVtHOBymqqqKjo6OM9rn6Z6P/JGPfISamhqeeeYZbrjhBh5//HEWLVrEunXrWL58OQ8++CDXX389Dz300Dm1SWEsIiIpZfHixXzsYx/j8OHDvPjiiyxbtozy8nLC4TArVqxg9+7dZ7zP+fPn8+STT7Jo0SK2b9/Onj17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\n",
      "text/plain": [
       "<Figure size 576x360 with 1 Axes>"
      ]
     },
     "metadata": {
      "needs_background": "light"
     },
     "output_type": "display_data"
    }
   ],
   "source": [
    "plot_learning_curves(history)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 9,
   "metadata": {},
   "outputs": [],
   "source": [
    "# 2.定义参数集合，即搜索空间\n",
    "# 使用一个分布，生成在连续空间中最小值到最大值的取值，用来生成学习率\n",
    "# f(x) = 1/(x * log(b/a))  a<=x<=b\n",
    "from scipy.stats import reciprocal\n",
    "\n",
    "param_distribution = {\n",
    "    \"hidden_layers\": [1, 2, 3, 4],\n",
    "    \"layer_size\": np.arange(1, 100),\n",
    "    \"learning_rate\": reciprocal(1e-4, 1e-2),\n",
    "}"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "metadata": {
    "scrolled": true
   },
   "outputs": [],
   "source": [
    "# 3.按照搜索空间进行搜索\n",
    "from sklearn.model_selection import RandomizedSearchCV\n",
    "\n",
    "# RandomizedSearchCV默认使用3折cross_validation：训练集分成n份，n-1训练，最后一份验证\n",
    "random_search_cv = RandomizedSearchCV(sklearn_model,param_distribution,\n",
    "                                      cv=3,n_iter=10,n_jobs=1)\n",
    "random_search_cv.fit(x_train_scaled, y_train, epochs=100,\n",
    "                     validation_data = (x_valid_scaled,y_valid),\n",
    "                     callbacks = callbacks)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 13,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "{'hidden_layers': 3, 'layer_size': 50, 'learning_rate': 0.0010951588862015238}\n",
      "-0.3051839210574325\n"
     ]
    }
   ],
   "source": [
    "# 打印最优参数、分数、模型\n",
    "print(random_search_cv.best_params_)\n",
    "print(random_search_cv.best_score_)\n",
    "# print(random_search_cv.best_estimator_)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "metadata": {},
   "outputs": [],
   "source": [
    "model = random_search_cv.best_estimator_.model\n",
    "model.evaluate(x_test_scaled,y_test)"
   ]
  }
 ],
 "metadata": {
  "kernelspec": {
   "display_name": "Python 3",
   "language": "python",
   "name": "python3"
  },
  "language_info": {
   "codemirror_mode": {
    "name": "ipython",
    "version": 3
   },
   "file_extension": ".py",
   "mimetype": "text/x-python",
   "name": "python",
   "nbconvert_exporter": "python",
   "pygments_lexer": "ipython3",
   "version": "3.6.10"
  }
 },
 "nbformat": 4,
 "nbformat_minor": 4
}
